﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;

namespace Sofire.DataComm.Net.Async
{
    /// <summary>
    /// 包含一个 <see cref="System.Net.Sockets.SocketAsyncEventArgs"/> 的事件参数。
    /// </summary>
    public class AsyncSocketEventArgs : EventArgs
    {
        /// <summary>
        /// 设置或获取用户自定义数据。
        /// </summary>
        public object Tag { get; set; }
        /// <summary>
        /// 当前事件参数关联的 <see cref="System.Net.Sockets.SocketAsyncEventArgs"/>。
        /// </summary>
        protected SocketAsyncEventArgs _AsyncEventArgs;
        /// <summary>
        /// 获取一个当前事件参数关联的 <see cref="System.Net.Sockets.SocketAsyncEventArgs"/>。
        /// </summary>
        public SocketAsyncEventArgs AsyncEventArgs
        {
            get
            {
                return this._AsyncEventArgs;
            }
            internal set { this._AsyncEventArgs = value; }
        }

        /// <summary>
        ///  获取要使用的套接字或创建用于接受与异步套接字方法的连接的套接字。
        /// </summary>
        public Socket Socket
        {
            get
            {
                if(this._AsyncEventArgs == null) return null;
#if SILVERLIGHT
                return this._AsyncEventArgs.ConnectSocket;
#else
                return this._AsyncEventArgs.AcceptSocket;
#endif
            }
        }

        /// <summary>
        /// 初始化 <see cref="Sofire.DataComm.Net.Async.AsyncSocketEventArgs"/> 的新实例。
        /// </summary>
        /// <param name="asyncEventArgs">当前事件参数关联的 <see cref="System.Net.Sockets.SocketAsyncEventArgs"/>。</param>
        public AsyncSocketEventArgs(SocketAsyncEventArgs asyncEventArgs)
        {
            this._AsyncEventArgs = asyncEventArgs;
        }
    }
}
